<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*
    ? 这是一道关于闭包的题目，对于fun方法，调用之后返回的是一个对象。
    ? 我们知道，当调用函数的时候传入的实参比函数声明时指定的形参个数要少，剩下的形参都将设置为undefined值。
    ? 所以 console.log(o); 会输出undefined。而a就是是fun(0)返回的那个对象。
    ? 也就是说，函数fun中参数 n 的值是0，而返回的那个对象中，需要一个参数n，而这个对象的作用域中没有n，它就继续沿着作用域向上一级的作用域中寻找n，最后在函数fun中找到了n，n的值是0。
    ? 了解了这一点，其他运算就很简单了，以此类推。
     */
  function fun(n, o) {
    console.log(o)
    return {
      fun: function(m){
        return fun(m, n);
      }
    };
  }
  //? undefined  0  0  0 n一直不增
  var a = fun(0);
  a.fun(1);
  a.fun(2);
  a.fun(3);
  //? undefined  0  1  2 n一直增加
  var b = fun(0).fun(1).fun(2).fun(3);
  //? undefined  0  1  1 n要断
  var c = fun(0).fun(1);
  c.fun(2);
  c.fun(3);
</script>
</body>
</html>
